﻿///////////////////////////////////////////////////////////////
//                                                           //
//    Timer Kontrolü Kaan BAŞLI tarafından hazırlanmıştır.   //
//                                                           //
//         kaan@kaanbasli.com  -  www.kaanbasli.com          //
//                                                           //
///////////////////////////////////////////////////////////////

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;

namespace TimerControl
{
    public partial class TimerLight : UserControl
    {
        // Tick olayı için delege ve event oluşturuyorum
        public delegate void TikDelegesi();
        public event TikDelegesi Tick;

        // Timer mantığını ufak bir storyboard ile hallediyorum
        Storyboard _timerSB = new Storyboard();
        DoubleAnimationUsingKeyFrames _dbAnim = new DoubleAnimationUsingKeyFrames();
        SplineDoubleKeyFrame _splineDb1 = new SplineDoubleKeyFrame();
        SplineDoubleKeyFrame _splineDb2 = new SplineDoubleKeyFrame();

        /* Buton oluşturma sebebim Storyboard'a bir hedef kontrol verme zorunluluğudur
           buton değilde bir textBlock da olabilirdi. Ne olduğunun bir önemi yok */
        Button _tempBtn = new Button();
        DependencyObject _dpObject;

        // Varsayılan Interval değeri
        public int _interval = 100;

        // Interval Property
        public int Interval
        {
            get
            {
                return _interval;
            }
            set
            {
                _interval = value;
            }
        }

        public TimerLight()
        {
            _splineDb1.KeyTime = new TimeSpan(0, 0, 0);
            _dbAnim.KeyFrames.Add(_splineDb1);
            _dbAnim.KeyFrames.Add(_splineDb2);
            _timerSB.Children.Add(_dbAnim);
            _dpObject = _tempBtn;
            Storyboard.SetTarget(_dbAnim, _dpObject);
            Storyboard.SetTargetProperty(_dbAnim, new PropertyPath(UIElement.OpacityProperty));
            _timerSB.Completed += new EventHandler(_timerSB_Completed);
        }

        public void Start()
        {
            _dbAnim.KeyFrames[1].KeyTime = new TimeSpan(0, 0, 0, 0, _interval);
            _timerSB.Begin();
        }

        public void Stop()
        {
            _timerSB.Stop();
        }

        void _timerSB_Completed(object sender, EventArgs e)
        {
            Tick();
            _timerSB.Begin();
        }
    }
}
